package negocio;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.hibernate.criterion.Order;

import basicas.CaracteristicaSetor;
import basicas.Artista;
import basicas.Evento;
import basicas.Ingresso;
import basicas.Local;
import basicas.LoginInvalido;
import basicas.Produtora;
import basicas.SetorLocal;
import basicas.Usuario;
import basicas.organizacionais.Funcao;
import basicas.organizacionais.Funcionario;
import basicas.organizacionais.Setor;



public class Fachada {

	private static Fachada instancia;
	
	private Controlador controlador;
	
	private Fachada(){
		this.controlador = new Controlador();
	}
	
	public static Fachada getInstancia(){
		if (instancia == null){
			instancia = new Fachada();
		}
		return instancia; 
	}


//INICIO FUNCIONARIO
	public void inserirFuncionario(Funcionario objeto) {
		controlador.inserirFuncionario(objeto);
	}

	public final void alterarFuncionario(Funcionario objeto) {
		controlador.alterarFuncionario(objeto);
	}

	public final void removerFuncionario(Funcionario objeto) {
		controlador.removerFuncionario(objeto);
	}

	public final List<Funcionario> pesquisar(Funcionario objeto) {
		return controlador.pesquisarFuncionario(objeto);
	}

        public final Funcionario getFuncionarioByCodigo(int codigo) {
            return controlador.getFuncionarioByCodigo(codigo);
        }        
        
	public List<Funcionario> listarFuncionarios() {
		return controlador.listarFuncionarios();
	}
//FIM FUNCIONARIO
//////////////////////////////////////////////////////////////////////////////

	public List<SetorLocal> listarTodosSetoresLocal() {
		return controlador.listarTodosSetoresLocal();
	}
	
	//INICIO LOCAL
	
	public Local alterar(Local objeto) {
		return controlador.alterar(objeto);
	}

	public void inserir(Local objeto) {
		controlador.inserir(objeto);
	}

	public final void removerLocal(Local objeto) {
		controlador.removerLocal(objeto);
	}

	public List<CaracteristicaSetor> listarTodasCaracteristicas() {
		return controlador.listarTodasCaracteristicas();
	}

	public void inserirCaracteristica(CaracteristicaSetor objeto) {
		controlador.inserirCaracteristica(objeto);
	}

	public void removerCaracteristica(CaracteristicaSetor objeto) {
		controlador.removerCaracteristica(objeto);
	}

	public final List<Local> pesquisar(Local objeto) {
		return controlador.pesquisarLocal(objeto);
	}

	

	

	public final Local buscarLocalPorChave(Serializable chave) {
		return controlador.buscarLocalPorChave(chave);
	}

	public SetorLocal alterar(SetorLocal objeto) {
		return controlador.alterar(objeto);
	}

	public void inserir(SetorLocal objeto) {
		controlador.inserir(objeto);
	}

	public final void remover(SetorLocal objeto) {
		controlador.remover(objeto);
	}

	

	public List<SetorLocal> listarTodosSetorLocal(Integer indiceInicial,
			Integer quantidade) {
		return controlador.listarTodosSetorLocal(indiceInicial, quantidade);
	}

	
	public List<Local> listarTodosLocais() {
		return controlador.listarTodosLocais();
	}
	
	
	
	
public final List<Local> pesquisarLocal(Local objeto) {
		return controlador.pesquisarLocal(objeto);
	}
//FIM LOCAL
		//////////////////////////////////////////////////////////////////////////////                      	
//INICIO ARTISTA      
        public void inserirArtista(Artista objeto) {
            controlador.inserirArtista(objeto);
        }        

        public final void alterarArtista(Artista objeto) {
            controlador.alterarArtista(objeto);
        }

        public final void removerArtista(Artista objeto) {
            controlador.removerArtista(objeto);
        }

        public final List<Artista> pesquisarArtista(Artista objeto) {
            return controlador.pesquisarArtista(objeto);
        }

        public final Artista getArtistaByCodigo(int codigo) {
            return controlador.getArtistaByCodigo(codigo);
        }        
        
        public List<Artista> listarArtistas() {
            return controlador.listarArtistas();
        }                
//FIM ARTISTA        
//////////////////////////////////////////////////////////////////////////////                              
//INICIO SETOR

    public void inserirSetor(Setor objeto) {
        controlador.inserirSetor(objeto);
    }

    public final void alterarSetor(Setor objeto) {
        controlador.alterarSetor(objeto);
    }

    public final void removerSetor(Setor objeto) {
        controlador.removerSetor(objeto);
    }

    public final List<Setor> pesquisarSetor(Setor objeto) {
        return controlador.pesquisarSetor(objeto);
    }

    public final Setor getSetorByCodigo(int codigo) {
        return controlador.getSetorByCodigo(codigo);
    }   
    
    public List<Setor> listarSetores() {
        return controlador.listarSetores();
    }
    
//FIM SETOR        
//////////////////////////////////////////////////////////////////////////////                      
//INICIO FUNCAO     

    public void alterarFuncao(Funcao objeto) {
         controlador.alterarFuncao(objeto);
    }

    public void inserirFuncao(Funcao objeto) {
        controlador.inserirFuncao(objeto);
    }

    public final void removerFuncao(Funcao objeto) {
        controlador.removerFuncao(objeto);
    }

    public final Funcao getFuncaoByCodigo(int codigo) {
        return controlador.getFuncaoByCodigo(codigo);
    }

    public List<Funcao> listarFuncoes() {
        return controlador.listarFuncoes();
    }
    
    
    public void inserirProdutora(Produtora objeto) {
		controlador.inserirProdutora(objeto);
	}
	
	
	public final void remover(Produtora objeto) {
		controlador.remover(objeto);
	}

  
	public List<Produtora> listarTodos() {
		return controlador.listarTodosProdutora();
		
	}
	
	
	 public final void alterarProdutora(Produtora objeto) {
	        controlador.alterarProdutora(objeto);
	    }
	
	public final Produtora buscarProdutoraPorChave(Serializable chave) {
		return controlador.buscarProdutoraPorChave(chave);
	}
	
	
	public final Usuario efetuarLogin(Usuario objeto) throws LoginInvalido {
		return controlador.efetuarLogin(objeto);
	}
	


	// ******************** EVENTO ******************************************* //
	
	public Evento alterarEvento(Evento objeto) {
		return controlador.alterarEvento(objeto);
	}

	public void inserirEvento(Evento objeto) {
		controlador.inserirEvento(objeto);
	}

	public final void inserirColecaoEvento(Collection<Evento> colecao) {
		controlador.inserirColecaoEvento(colecao);
	}

	public final void removerEvento(Evento objeto) {
		controlador.removerEvento(objeto);
	}

	public final Evento buscarEventoChave(Serializable chave) {
		return controlador.buscarEventoPorChave(chave);
	}

	public List<Evento> listarTodosEvento() {
		return controlador.listarTodosEvento();
	}

	public int gerarIngressos(Evento objeto) {
		return controlador.gerarIngressos(objeto);
		
	}
	
	public List<Ingresso> listarIngressos(){
		return controlador.listarTodosIngressos();
		
	}
	
	// ******************** FIM EVENTO ************************************** //
    
	public void inserirUsuario(Usuario objeto) {
		controlador.inserirUsuario(objeto);
	}
	

        //--ingresso
        
        public List<Ingresso> listarIngressosEvento(Evento evt){
            return controlador.listarIngressosEvento(evt);
        }
        
        
        public void vederIngresso(int codIngresso){
            controlador.venderIngresso(codIngresso);
        }
}
